export enum WxErrorCode {
  INVALID = 40029, // js_code无效
  LIMIT = 45011, // API 调用太频繁，请稍候再试
  BLOCKED = 40226, // 高风险等级用户，小程序登录拦截 。风险等级详见用户安全解方案
  SYSTEM_ERROR = -1, // 系统繁忙，此时请开发者稍候再试
  SUCCESS = 0 // 成功
}

interface IBaseWxResult<T> {
  errmsg?: string // 错误信息
  errcode?: T // 错误码
}

export interface IWxSessionResult extends IBaseWxResult<WxErrorCode>{
  session_key: string // 会话密钥
  unionid?: string // 用户在开放平台的唯一标识符，若当前小程序已绑定到微信开放平台账号下会返回
  openid: string // 用户唯一标识
}

export enum WxTokenErrorCode {
  SystemError = -1, // 系统繁忙，此时请开发者稍候再试
  Success = 0, // 成功
  InvalidGrantType = 40002, // 不合法的凭证类型
  InvalidAppId = 40013, // 不合法的 AppID ，请开发者检查 AppID 的正确性，避免异常字符，注意大小写
  InvalidAppSecret = 40125, // 无效的appsecret，请检查appsecret的正确性
  InvalidIp = 40164, // 无效的ip，请检查ip白名单的设置
  AppIdMissing = 41002, // 缺少 appid 参数
  AppSecretMissing = 41004, // 缺少 secret 参数
  RequirePostMethod = 43002, // 需要 POST 请求
  ReachMaxApiDailyQuotaLimit = 45009, // 调用超过天级别频率限制
  ApiMinuteQuotaReachLimit = 45011, // API 调用太频繁，请稍候再试
  RequireAdminConfirm = 89503, // 此次调用需要管理员确认，请耐心等候
  IpBlocked24H = 89506, // 该IP调用求请求已被公众号管理员拒绝，请24小时后再试，建议调用前与管理员沟通确认
  IpBlocked1H = 89507 // 该IP调用求请求已被公众号管理员拒绝，请1小时后再试，建议调用前与管理员沟通确认
}

export interface IWxTokenResult extends IBaseWxResult<WxTokenErrorCode>{
  access_token: string // 获取到的凭证
  expires_in: number // 凭证有效时间，单位：秒
}

export enum WxPhoneErrorCode {
  SUCCESS = 0, // 成功
  SystemError = -1, // 系统繁忙，此时请开发者稍候再试
  InvalidCode = 40029, // js_code无效
  ApiMinuteQuotaReachLimit = 45011, // API 调用太频繁，请稍候再试
  InvalidAppId = 40013 // 请求appid身份与获取code的小程序appid不匹配
}

export interface IWxPhoneInfo {
  phoneNumber: string // 用户绑定的手机号（国外手机号会有区号）
  purePhoneNumber: string // 没有区号的手机号
  countryCode: string // 区号
}

export interface IWxPhoneResult extends IBaseWxResult<WxPhoneErrorCode>{
  phone_info: IWxPhoneInfo
}
